using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class ProviderRoleAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public ProviderRoleAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v24] = HL7TableType.HL7;
						tableVersionTypes[HL7Version.v25] = HL7TableType.User;
						tableVersionTypes[HL7Version.v251] = HL7TableType.User;
						tableVersionTypes[HL7Version.v26] = HL7TableType.User;
						tableVersionTypes[HL7Version.v27] = HL7TableType.User;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v24] = new string[]{"AD","AT","CP","FHCP","PP","RP","RT"};
						validVersionCodes[HL7Version.v25] = new string[]{"AD","AT","CP","FHCP","PP","RP","RT"};
						validVersionCodes[HL7Version.v251] = new string[]{"AD","AT","CP","FHCP","PP","RP","RT"};
						validVersionCodes[HL7Version.v26] = new string[]{"AD","AT","CP","FHCP","PP","RP","RT","TR","PI","AI","TN"};
						validVersionCodes[HL7Version.v27] = new string[]{"AD","AP","AT","CLP","CP","DP","EP","FHCP","IP","MDIR","OP","PH","PP","RO","RP","RT","TR","PI","AI","TN","VP","VPS","VTS"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v24] = new string[]{"Admitting","Attending","Consulting Provider","Family Health Care Professional","Primary Care Provider","Referring Provider","Referred to Provider"};
						validVersionDescriptions[HL7Version.v25] = new string[]{"Admitting","Attending","Consulting Provider","Family Health Care Professional","Primary Care Provider","Referring Provider","Referred to Provider"};
						validVersionDescriptions[HL7Version.v251] = new string[]{"Admitting","Attending","Consulting Provider","Family Health Care Professional","Primary Care Provider","Referring Provider","Referred to Provider"};
						validVersionDescriptions[HL7Version.v26] = new string[]{"Admitting","Attending","Consulting Provider","Family Health Care Professional","Primary Care Provider","Referring Provider","Referred to Provider","Transcriptionist","Primary Interpreter","Assistant/Alternate Interpreter","Technician"};
						validVersionDescriptions[HL7Version.v27] = new string[]{"Admitting","Administering Provider","Attending","Collecting Provider","Consulting Provider","Dispensing Provider","Entering Provider (probably not the same as transcriptionist?)","Family Health Care Professional","Initiating Provider (as in action by)","Medical Director","Ordering Provider","Pharmacist   (not sure how to dissect Pharmacist/Treatment Supplier's Verifier ID)","Primary Care Provider","Responsible Observer","Referring Provider","Referred to Provider","Transcriptionist","Primary Interpreter","Assistant/Alternate Interpreter","Technician","Verifying Provider","Verifying Pharmaceutical Supplier   (not sure how to dissect Pharmacist/Treatment Supplier's Verifier ID)","Verifying Treatment Supplier   (not sure how to dissect Pharmacist/Treatment Supplier's Verifier ID)"};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
